﻿/**
 * Proyecto: Cognitum
 * Global IT Services 2008
 * @author Mislas
 */
Cognitum.Cobranza.Conciliacion.Generales = Ext.extend(Karma.TFB, {
    initComponent: function() {
        Ext.apply(this, {
            column1items: [
            {
                xtype: 'datefield',
                fieldLabel: 'Fecha Conciliación',
                name: 'FechaConciliacion',
                allowBlank: true
            },
            {
                fieldLabel: 'Concilió',
                name: 'UsuarioConcilio',
                entityName: 'Usuario',
                xtype: 'entity.link'
            },
            {
                fieldLabel: 'Aseguradora',
                name: 'Aseguradora',
                entityName: 'Aseguradoras',
                canAdd: false,
                allowBlank: true,
                xtype: 'entity.link'
            }, {
                fieldLabel: 'Moneda',
                name: 'Moneda',
                entityName: 'Monedas',
                canAdd: false,
                xtype: 'entity.link',
                ignoreTriggers: true,
                contextTriggers: [{
                    id: 'Aseguradora',
                    query: ''
                    }],
                    listeners: {
                        set: {
                            fn: function() {
                                var aseguradora = this.getForm().findField('Aseguradora').getEntityValue();
                                var moneda = this.getForm().findField('Moneda').getEntityValue();
                                var recibosList = this.col3Panel.items.get(0);
                                recibosList.setSelectContextSubQuery(
								'r.Estatus=3 and r.Tramite.Aseguradora.Id=' + aseguradora.Id +
								' and r.Tramite.Moneda.Id=' + moneda.Id);
                            },
                            scope: this
                        },
                        cleared: {
                            fn: function() {
                                var recibosList = this.col3Panel.items.get(0);
                                recibosList.setSelectContextSubQuery('and r.Tramite.Aseguradora.Id=0');
                            },
                            scope: this
                        }
                    }
                }, {
                    fieldLabel: '# Factura',
                    name: 'NumeroFactura',
                    allowBlank: true
}],
                    column2items: [{
                        fieldLabel: 'Total comision',
                        xtype: 'numberfield',
                        name: 'TotalComision',
                        labelStyle: 'font-weight:bold;',
                        disabled: true
                    }, {
                        fieldLabel: 'Total comision pagada',
                        xtype: 'numberfield',
                        labelStyle: 'font-weight:bold;',
                        name: 'TotalComisionPagada',
                        disabled: true
                    },
            {
                xtype: 'datefield',
                fieldLabel: 'Aplicacion Cia.',
                name: 'FechaAplicacionCia',
                allowBlank: true
            },
            {
                xtype: 'datefield',
                fieldLabel: 'Fecha Abono',
                name: 'FechaAbono',
                allowBlank: true
}],
                    column3items: [{
                        hideLabel: true,
                        name: 'Recibos',
                        entityName: 'Recibos',
                        title: 'Recibos',
                        xtype: 'entity.list',
                        selectionConfig: {
                            multiSelect: true,
                            width: 700
                        },
                        context: 'r.Conciliacion.Id=?',
                        anchor: '100% 100%',
                        listeners: {
                            'beforeadd': {
                                fn: this.actualizaTotales,
                                scope: this
                            },
                            'beforedelete': {
                                fn: this.actualizaTotales,
                                scope: this
                            },
                            'refresh': {
                                fn: this.actualizaTotales,
                                scope: this
                            }
                        },
                        updateControls: function(Conciliacion) {
                            if (Ext.isEmpty(Conciliacion)) {
                                return;
                            }
                            // menu config
                            this.deleteMenuAction.setDisabled(!(this.canDelete && Conciliacion.Estatus == 0));
                            this.newToolbarButton.setDisabled(!(this.canNew && Conciliacion.Estatus == 0));

                        },
                        onBeforeAdd: function(ids, data, Conciliacion) {
                            if (Ext.isEmpty(Conciliacion)) {
                                return;
                            }
                            Ext.MessageBox.show({
                                msg: 'Procesando...',
                                progressText: 'Saving...',
                                width: 300,
                                wait: true,
                                waitConfig: { interval: 200 }
                            });
                            this.entity.useInvoker('DoAsignaConciliacion', [ids, Conciliacion.Id], {
                                fn: function() {
                                    this.reload();
                                    this.fireEvent('beforeadd');
                                    Ext.MessageBox.hide();

                                    /*this.entity.useInvoker(Karma.Conf.GetMethod, id, {
                                    fn: function(conciliacion) {
                                    alert("reloading... 1");
                                    this.getForm().findField('TotalComision').setValue(conciliacion.TotalComision);
                                    this.getForm().findField('TotalComisionPagada').setValue(conciliacion.TotalComisionPagada);
                                    },
                                    scope: this
                                    });*/


                                },
                                scope: this
                            });
                        },
                        onBeforeDelete: function(id) {
                            if (Ext.isEmpty(id)) {
                                return;
                            }
                            Ext.MessageBox.show({
                                msg: 'Procesando...',
                                progressText: 'Saving...',
                                width: 300,
                                wait: true,
                                waitConfig: { interval: 200 }
                            });
                            this.entity.useInvoker('DoDesasignaConciliacion', id, {
                                fn: function() {
                                    this.reload();
                                    this.fireEvent('beforedelete');
                                    Ext.MessageBox.hide();
                                },
                                scope: this
                            });
                        },
                        reload: function() {
                            this.getStore().baseParams.Parameters.SubQuery = this.context;
                            this.getStore().reload();                                                       
                            this.fireEvent('refresh');
                        }
}]
                    });
                    Cognitum.Cobranza.Conciliacion.Generales.superclass.initComponent.apply(this, arguments);
                },
                updateControls: function(value) {
                    if (Ext.isEmpty(value)) {
                        return;
                    }
                    if (!this.isNew) {
                        this.getForm().findField('Aseguradora').disable();
                    }
                },
                actualizaTotales: function() {
                    if (Ext.isEmpty(this.getForm())) {
                        return;
                    }
                    var id = this.getForm().findField('Id').getValue();
                    this.entity.useInvoker(Karma.Conf.GetMethod, id, {
                        fn: function(conciliacion) {                            
                            this.getForm().findField('TotalComision').setValue(conciliacion.TotalComision);
                            this.getForm().findField('TotalComisionPagada').setValue(conciliacion.TotalComisionPagada);
                        },
                        scope: this
                    });
                },
                refreshing: function() {
                    alert("refreshing");
                }
            });
Ext.reg('conc.ctls.gral', Cognitum.Cobranza.Conciliacion.Generales);

Cognitum.Cobranza.Conciliacion.Editor = Ext.extend(Karma.EBCard, {
    initComponent: function(){
        Ext.apply(this, {
            sections: [{
                title: 'Datos generales',
                xtype: 'conc.ctls.gral'
            }, {
                title: 'Observaciones',
				items: [{
					xtype: 'htmleditor',
					hideLabel: true,
					name: 'Observaciones',
					anchor: '100% 100%'
				}]
            }, {
            title: 'Complementos',
            items: [{
				canNew: true,
				canDelete: false,
                hideLabel: true,
                name: 'Comisiones',
                entityName: 'ComplementosConciliaciones',
                xtype: 'ag.list',
                context: 'c.Conciliacion.Id=?',
                anchor: '99% 99%'
            }]
        }, {
                xtype: 'sec.editor',
                title: 'Info Permisos'
            }, {
                xtype: 'aud.editor',
                title: 'Info Registro'
            }]
        });
        Cognitum.Cobranza.Conciliacion.Editor.superclass.initComponent.apply(this, arguments);
    },
    getTBarCustomControls: function(){
        return [this.aplicarBtn = new Ext.Button({
            xtype: 'button',
            formBind: true,
            text: 'Aplicar',
            handler: this.onAplicar,
            scope: this
        }), this.cancelarBtn = new Ext.Button({
            xtype: 'button',
            formBind: true,
            text: 'Cancelar',
            handler: this.onCancelar,
            scope: this
        })];
    },
    updateControls: function(value){
        Cognitum.Cobranza.Conciliacion.Editor.superclass.updateControls.apply(this, arguments);
        this.aplicarBtn.setDisabled(!this.puedeAplicar(value));
        this.cancelarBtn.setDisabled(!this.puedeCancelar(value));
    },
    puedeAplicar: function(value){
        if (!this.entity.security.has('Aplicar')) {
            return false;
        }
        return (!this.isNew) && value.Estatus == 0;
    },
    puedeCancelar: function(value){
        if (!this.entity.security.has('Cancelar')) {
            return false;
        }
        return (!this.isNew) && value.Estatus == 0;
    },
	onAplicar: function(){
		var comision = this.getForm().findField('TotalComision').getValue();
		var comisionPagada = this.getForm().findField('TotalComisionPagada').getValue();
		if (comisionPagada < comision) {
	        Ext.Msg.show({
	            title: 'Aviso',
	            msg: 'La comision pagada es menor del total de la comision de los recibos, desea generar un complemento?',
	            buttons: Ext.Msg.YESNO,
	            fn: function(result){
	                if (result === 'yes') {
						Ext.Msg.prompt('Observaciones', 'Observaciones:', function(btn, obs){
		                    var id = this.getForm().findField('Id').getValue();
							var params;
						    if (btn == 'ok'){
								params = [id, true, obs];
						    } 
							if (result === 'cancel') {
								params = [id, true];
							}
		                    this.doOperationWithParams('DoAplica', params, {
		                        fn: function(Conciliacion){
		                            this.status.setStatus({
		                                text: 'La Conciliacion fue aplicada existosamente.',
		                                iconCls: 'ok-icon',
		                                clear: true
		                            });
		                            this.updateControls(Conciliacion);
		                            Ext.MessageBox.alert('Exito', 'La operacion de Aplicacion se realizo con exito.');
		                        },
		                        scope: this
		                    });
						}, this);
	                }
	                if (result === 'no') {
	                    var id = this.getForm().findField('Id').getValue();
	                    this.doOperationWithParams('DoAplica', [id, false], {
	                        fn: function(Conciliacion){
	                            this.status.setStatus({
	                                text: 'La Conciliacion fue aplicada existosamente.',
	                                iconCls: 'ok-icon',
	                                clear: true
	                            });
	                            this.updateControls(Conciliacion);
	                            Ext.MessageBox.alert('Exito', 'La operacion de Aplicacion se realizo con exito.');
	                        },
	                        scope: this
	                    });
	                }
	            },
	            icon: Ext.MessageBox.QUESTION,
	            scope: this
	        });
		}
		else {
	        Ext.Msg.show({
	            title: 'Aplicacion',
	            msg: 'Esta apunto de realizar una Aplicacion',
	            buttons: Ext.Msg.YESNO,
	            fn: function(result){
	                if (result === 'yes') {
	                    var id = this.getForm().findField('Id').getValue();
	                    this.doOperationWithParams('DoAplica', id, {
	                        fn: function(Conciliacion){
	                            this.status.setStatus({
	                                text: 'La Conciliacion fue aplicada existosamente.',
	                                iconCls: 'ok-icon',
	                                clear: true
	                            });
	                            this.updateControls(Conciliacion);
	                            Ext.MessageBox.alert('Exito', 'La operacion de Aplicacion se realizo con exito.');
	                        },
	                        scope: this
	                    });
	                }
	            },
	            icon: Ext.MessageBox.QUESTION,
	            scope: this
	        });
		}
    },
	onCancelar: function(){
        Ext.Msg.show({
            title: 'Cancelación',
            msg: 'Esta apunto de realizar una Cancelación',
            buttons: Ext.Msg.YESNO,
            fn: function(result){
                if (result === 'yes') {
                    var Conciliacion = this.getForm().getFieldValues();
                    this.doOperationWithParams('DoCancela', Conciliacion, {
                        fn: function(Conciliacion){
                            this.status.setStatus({
                                text: 'La Conciliacion fue cancelada existosamente.',
                                iconCls: 'ok-icon',
                                clear: true
                            });
                            this.updateControls(Conciliacion);
                            Ext.MessageBox.alert('Exito', 'La operacion de Cancelacion se realizo con exito.');
                        },
                        scope: this
                    });
                }
            },
            icon: Ext.MessageBox.QUESTION,
            scope: this
        });
    }
});
Ext.reg('conc.editor', Cognitum.Cobranza.Conciliacion.Editor);
